<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="keywords" content="Hexo Theme Redefine">
    <meta name="description" content="Hexo Theme Redefine">
    <meta name="author" content="茶小李">
    <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-redefine.png">
    
    <!--- Seo Part-->
    
    <link rel="canonical" href="http://example.com/code/记录.html"/>
    <meta name="robots" content="index,follow">
    <meta name="googlebot" content="index,follow">
    <meta name="revisit-after" content="1 days">
    <meta property="og:type" content="article">
    <meta property="og:title" content="记录">
    <meta property="og:description" content="Hexo Theme Redefine">
    <meta property="og:url" content="http://example.comCode/记录.html">
    
    <meta property="og:site_name" content="茶小李">
    <meta name="twitter:card" content="summary_large_image">
    <meta name="twitter:title" content="记录">
    <meta name="twitter:description" content="Hexo Theme Redefine">
    <meta name="twitter:image" content="/images/redefine-logo.svg">
    <!--- Icon Part-->
    <link rel="icon" type="image/png" href="/images/redefine-logo.svg" sizes="192x192">
    <link rel="apple-touch-icon" sizes="180x180" href="/images/redefine-logo.svg">
    <meta name="theme-color" content="#005080">
    <link rel="shortcut icon" href="/images/redefine-logo.svg">
    
    <title>
        
            记录 -
        
        茶小李
    </title>
    
<link rel="stylesheet" href="/css/style.css">

    
<link rel="stylesheet" href="/assets/fonts.css">

    
    
    
    <script id="hexo-configurations">
    let REDEFINE = window.REDEFINE || {};
    REDEFINE.hexo_config = {"hostname":"example.com","root":"/","language":"zh-CN"};
    REDEFINE.theme_config = {"toc":{"enable":true,"number":false,"expand_all":true,"init_open":true},"style":{"primary_color":"#005080","avatar":"/images/redefine-avatar.svg","favicon":"/images/redefine-logo.svg","og_image":{"enable":false,"image_url":null},"article_img_align":"center","right_side_width":"210px","content_max_width":"1000px","nav_color":{"left":"#f78736","right":"#367df7","transparency":35},"hover":{"shadow":true,"scale":false},"first_screen":{"enable":true,"background_image":{"light":"/images/wallhaven-wqery6-light.webp","dark":"/images/wallhaven-wqery6-dark.webp"},"title_color":{"light":"#fff","dark":"#d1d1b6"},"font_sizes":{"title":"2.8rem","subtitle":"1.5rem"},"line_height":1.2,"title":"茶小李的记录","subtitle":{"enable":false,"list":[]},"custom_font":{"enable":false,"font_family":null,"font_url":null}},"scroll":{"progress_bar":{"enable":true},"percent":{"enable":false}}},"local_search":{"enable":false,"preload":true},"code_block":{"copy":true,"style":"simple","custom_font":{"enable":false,"font_family":null,"font_url":null}},"pjax":{"enable":true},"lazyload":{"enable":true},"version":"1.2.1","friend_links":{"columns":2},"home_article":{"date_format":"auto","category":{"enable":true,"limit":3},"tag":{"enable":true,"limit":3}},"plugins":{"aplayer":{"enable":true,"audio":[{"name":"Something Just Like This","artist":"Coldplay","url":"https://evan.beee.top/music/Something%20Just%20Like%20This%20-%20The%20Chainsmokers%E3%80%81Coldplay.mp3","cover":"https://evan.beee.top/music/covers/Something_Just_Like_This.png"},{"name":"Imagine","artist":"John Lennon","url":"https://evan.beee.top/music/Imagine%20-%20John%20Lennon.mp3","cover":"https://evan.beee.top/music/covers/Lennon_Imagine_Sleeve_1975.jpg"},{"name":"Empire Of Ange","artist":"Eternal","url":"/music/Empire Of Ange.mp3","cover":"https://evan.beee.top/music/covers/Something_Just_Like_This.png"}],"mini":true},"mermaid":{"enable":false,"version":"9.3.0"}}};
    REDEFINE.language_ago = {"second":"%s 秒前","minute":"%s 分钟前","hour":"%s 小时前","day":"%s 天前","week":"%s 周前","month":"%s 个月前","year":"%s 年前"};
  </script>
    
    
<link rel="stylesheet" href="/fontawesome/fontawesome.min.css">

    
<link rel="stylesheet" href="/fontawesome/brands.min.css">

    
<link rel="stylesheet" href="/fontawesome/solid.min.css">

    
<link rel="stylesheet" href="/fontawesome/regular.min.css">

    
    
    
    
<meta name="generator" content="Hexo 6.3.0"></head>


<body>
<div class="progress-bar-container">
    
        <span class="scroll-progress-bar"></span>
    

    
        <span class="pjax-progress-bar"></span>
        <span class="pjax-progress-icon">
            <i class="fa-solid fa-circle-notch fa-spin"></i>
        </span>
    
</div>


<main class="page-container">

    

    <div class="page-main-content">

        <div class="page-main-content-top">
            <header class="menu-wrapper">
    
    <div class="menu-content">
        <div class="left">
            
            <a class="logo-title" href="/">
                
                茶小李
                
            </a>
        </div>

        <div class="right">
            <!-- PC -->
            <div class="pc">
                <ul class="menu-list">
                    
                        
                            <li class="menu-item">
                                <!-- Menu -->
                                <a class="" 
                                    href="/"  >
                                    
                                        
                                            <i class="fa-regular fa-house"></i>
                                        
                                        首页
                                    
                                </a>
                                <!-- Submenu -->
                                
                            </li>
                    
                        
                            <li class="menu-item">
                                <!-- Menu -->
                                <a class="" 
                                    href="/Image"  >
                                    
                                        
                                            <i class="fa-regular fa-image"></i>
                                        
                                        图片
                                    
                                </a>
                                <!-- Submenu -->
                                
                            </li>
                    
                        
                            <li class="menu-item">
                                <!-- Menu -->
                                <a class="active" 
                                    href="/Code"  >
                                    
                                        
                                            <i class="fa-regular fa-code"></i>
                                        
                                        CODE
                                    
                                </a>
                                <!-- Submenu -->
                                
                            </li>
                    
                    
                </ul>
            </div>
            <!-- Mobile -->
            <div class="mobile">
                
                <div class="icon-item menu-bar">
                    <div class="menu-bar-middle"></div>
                </div>
            </div>
        </div>
    </div>

    <!-- Mobile drawer -->
    <div class="menu-drawer">
        <ul class="drawer-menu-list">
            
                
                    <li class="drawer-menu-item flex-center">
                        <a class="" 
                        href="/"  >
                             
                                
                                    <i class="fa-regular fa-house"></i>
                                
                                首页
                            
                        </a>
                    </li>
                    <!-- Submenu -->
                    
            
                
                    <li class="drawer-menu-item flex-center">
                        <a class="" 
                        href="/Image"  >
                             
                                
                                    <i class="fa-regular fa-image"></i>
                                
                                图片
                            
                        </a>
                    </li>
                    <!-- Submenu -->
                    
            
                
                    <li class="drawer-menu-item flex-center">
                        <a class="active" 
                        href="/Code"  >
                             
                                
                                    <i class="fa-regular fa-code"></i>
                                
                                CODE
                            
                        </a>
                    </li>
                    <!-- Submenu -->
                    
            

        </ul>
    </div>

    <div class="window-mask"></div>

</header>


        </div>

        <div class="page-main-content-middle">

            <div class="main-content">

                
                    <div class="fade-in-down-animation">
    <div class="page-template-container">
        
        
        <div class="page-template-content markdown-body">
            
                <p>Welcome to <a class="link"   target="_blank" rel="noopener" href="https://hexo.io/" >Hexo <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a>! This is your very first post. Check <a class="link"   target="_blank" rel="noopener" href="https://hexo.io/docs/" >documentation <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a> for more info. If you get any problems when using Hexo, you can find the answer in <a class="link"   target="_blank" rel="noopener" href="https://hexo.io/docs/troubleshooting.html" >troubleshooting <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a> or you can ask me on <a class="link"   target="_blank" rel="noopener" href="https://github.com/hexojs/hexo/issues" >GitHub <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a>.</p>
<h2 id="TweenManager"><a href="#TweenManager" class="headerlink" title="TweenManager"></a>TweenManager</h2><p>EaseGet &#x3D; {</p>
<p>}</p>
<p>GTween &#x3D; {<br>        local private &#x3D; {}<br>        local public &#x3D; {}<br>        local pairs &#x3D; pairs<br>        function private:Init()<br>                self.isStart &#x3D; false<br>                self.canUpdate &#x3D; false<br>                self.steIdx &#x3D; 1<br>                self.loopCount &#x3D; 0 – 当前循环第几次<br>        end</p>
<pre><code>    function public:SetProps(props)
            if not props then return end
            private.loopTotalCount = props.loopTotalCount -- 循环总次数
            if props.loop or private.loopTotalCount and private.loopTotalCount &gt; 0 then
                    private.loop = true
            end
            private.onChange = props.onChange
            private.loopComplete = props.loopComplete
    end

    function public:SetTarget(target,tweenId)
            private.target = target
            private.tweenId = tweenId
            local targetName = &quot;&quot;
            if not UGUITools.IsNil(target) then
                    targetName = target.name
                    if not targetName and target.gameObject and not UGUITools.IsNil(target.gameObject) then
                            targetName = target.gameObject.name
                    end
            end
            private.targetName = targetName or &quot;&quot;
            private.initialProps = nil
    end

    function public:GetTweenId()
            return private.tweenId
    end

    function public:To(props,duration,ease)
            if not private.target then
                    return
            end
            if not props or type(props) ~= &quot;table&quot; then
                    return
            end
            if not duration or duration &lt; 0 then
                    return
            end
            if not private.initialProps then
                    private.initialProps = &#123;&#125;
                    for k , v in pairs(props) do
                            private.initialProps[k] = private:GetTargetAttr(k)
                            private:ClearTargetByKey(k)
                    end
            end
            private:AddStep(&#123;
                    type = &quot;to&quot;,
                    props = props,
                    duration = duration,
                    ease = ease&#125;)
            return self
    end

    function public:Wait(duration)
            private:AddStep(&#123;
                    type = &quot;wait&quot;,
                    duration = duration&#125;)
            return self
    end

    function public:Call(call,caller,...)
            private:AddStep(&#123;
                    type = &quot;call&quot;,
                    callBack = call,
                    caller = caller,
                    params = &#123;...&#125;)
            return self
    end

    function public:OnPause()
            private.canUpdate = false
    end

    function public:OnResume()
            if private.isStart and private.curStep then
                    private.canUpdate = true
            end
    end

    function private:AddStep(step)
        if not self.setps then
            self.steps = &#123;&#125;
        end
        table.insert(self.steps,step)
    end

    function private:beginTween()
        if self.isStart then return end
        self.isStart = true
        self:GetStep()
    end

    function private:GetStep()
        if not self.isStart then return end
        if self.loop then
            if self.stepIdx &gt; #self.steps then
                self.loopCount = self.loopCount + 1
                if self.loopTotalCount and self.loopTotalCount &gt; 0 and self.loopCount &gt;= self.loopTotalCount then
                    --loopComplete
                    if self.loopComplete then
                        self.loopComplete()
                    end
                    self:StopAction()
                    return
                end
    
                self.stepIdx = 1
                if self.initialProps then
                    for k, v in pairs(self.initialProps) do
                        self:SetTargetAttr(k,v)
                    end
                end
                --一轮循环结束，属性已经重设到初始值，不用校正
                self.lastStep = nil
            end
            self.curStep = self.steps[self.stepIdx]
            self.stepIdx = self.stepIdx + 1
        else
            self.curStep = table.remove(self.steps,1)
        end
        --属性校正
        if self.lastStep and self.lastStep.props then
            for k, v in pairs(self.lastStep.props) do
                self:SetTargetAttr(k,v)
            end
        end
    
        self.lastStep = self.curStep
        if not self.curStep then
            self:StopAction()
            return
        end
        if self.curStep.type == &quot;call&quot; then
            local callBack = self.curStep.callBack
            if callBack then
                if self.curStep.caller then
                    callBack(self.curStep.caller,unpack(self.curStep.params))
                else
                    callBack(unpack(self.curStep.params))
                end
            end
            self:GetStep()
            return
        end
    
        self.timeCount = 0
        self.stepEndTime = self.curStep.duration
        self.stepProps = &#123;&#125;
        self.targetProps = &#123;&#125;
        self.canUpdate = true
    end

    function public:RunAction(deltaTime)
        if not private.canUpdate then return end
        private.timeCount = private.timeCount + deltaTime
    
        if private.timeCount &gt;= private.stepEndTime then
            private.canUpdate = false
            private:GetStep()
        end
        local curStep = private.curStep
        if curStep.type == &quot;to&quot; then
            local props = curStep.props
            local ratio = (curStep.duration = (private.stepEndTime - private.timeCount)) / curStep.duration
            ratio = math.min(ratio,1)
            if curStep.ease then
                ratio = curStep.ease(ratio)
            end
    
            for k, v in pairs(props) do
                if not private.stepProps[k] then
                    private.stepProps[k] = private:GetTargetAttr(k)
                end
                local diff = v - private.stepProps[k]
                local value = private.stepProps[k] + (diff * ratio)
                private.targetProps[k] = value
                private:SetTargetAttr(k,value)
            end
    
            local onChange = private.onChange
            if onChange then
                onChange(private.targetProps)
            end
        end
    end

    function private:CheckTargetAttr(k)
        local errorTips = &quot;&quot;
    
        if type(self.target) == &quot;table&quot; then
            if self.target[k] then
                self.isTargetSelf = true
            else
                errorTips = &quot;not found &quot;..k..&quot; in tween target.&quot;
            end
        else
            if UGUITools.IsNil(self.target) then
                errorTips = &quot;tween target is nil&quot;
            else
                if not self.targetTransform then
                    self.targetTransform = self.target.gameObject.transform
                end
                if not self.targetTransform then
                    errorTips = &quot;not found transform in tween target. ----key：&quot;..k
                end
            end
        end

        if errorTips == &quot;&quot; then
            if k == &quot;x&quot; or k == &quot;y&quot; or k == &quot;z&quot; then
                if not self.targetPosition then
                    self.targetPosition = self.targetTransform.localPosition
                end
            elseif k == &quot;scaleX&quot; or k == &quot;scaleY&quot; or k == &quot;scaleZ&quot; then
                if not self.targetScale then
                    self.targetScale = self.targetTransform.localScale
                end
            elseif k == &quot;rotationX&quot; or k == &quot;rotationY&quot; or k == &quot;rotationZ&quot; then
                if not self.targetRotation then
                    self.targetRotation = self.targetTransform.localEulerAngles
                end
            elseif k == &quot;width&quot; or k == &quot;height&quot; then
                if not self.targetSize then
                    self.targetSize = self.targetTransform.sizeDelta
                end
            elseif k == &quot;alpha&quot; then
                if not self.canvasGroup then
                    self.canvasGroup = UGUITools.FindInChild(&quot;CanvasGroup&quot;,self.target.gameObject,&quot;&quot;)
                end
                if not self.canvasGroup then
                    errorTips = &quot;not found canvasGroup in tween target. ----Key：&quot;..k
                end
            elseif not self.target[k] then
                errorTips = &quot;not found &quot;..k..&quot; in tween target.&quot;
            end
        end
        if errorTips ~= &quot;&quot; then
            local curStepStr = private:GetStepTestStr(self.curStep)
            local stepStr = &quot;&quot;
            if self.steps then
                for i = 1,#self.steps do
                    stepStr = stepStr..&quot;(step&quot;..i..&quot;)&quot;..private:GetStepTestStr(self.steps[i])
                end
            end
            local targetName = private.targetName
            TweenUtil.RemoveTween(self.tweenId)
            error(erropTips..&quot;---&gt;&gt;&gt;targetName：&quot;..targetName..&quot;，curStep：&quot;..curStepStr..&quot;，stepList：&quot;..stepStr)
        end
    end

    function private:GetStepTestStr(step)
        local stepStr = &quot;&quot;
        if step then
            stepStr = step.type
            if step.props then
                for k,v in pairs(step.props) do
                    stepStr = stepStr..&quot;--&gt;&quot;..k..&quot;=&quot;..v..&quot;,&quot;
                end
            end
            if step.duration then
                stepStr = stepStr..&quot;time：&quot;..step.duration
            end
        end
        return stepStr
    end

    function private:SetTargetAttr(k,v)
        self:CheckTargetAttr(k)
        if self.isTargetSelf then
            self.target[k] = v
            return
        end
    
        if k == &quot;x&quot; or k == &quot;y&quot; or k == &quot;z&quot; then
            self.targetPosition[k] = v
            self.targetTransform.localPosition = self.targetPosition
        elseif k == &quot;scaleX&quot; or k == &quot;scaleY&quot; or k == &quot;scaleZ&quot; then
            self.targetScale[TweenUtil.GetTweenAttrName(k)] = v
            self.targetTransform.localScale = self.targetScale
        elseif k == &quot;rotationX&quot; or k == &quot;rotationY&quot; or k == &quot;rotationZ&quot; then
            self.targetRotation[TweenUtil.GetTweenAttrName(k)] = v
            self.targetTransform.localEulerAngles = self.targetRotation
        elseif k == &quot;width&quot; or k == &quot;height&quot; then
            self.targetSize[TweenUtil.GetTweenAttrName(k)] = v
            self.targetTransform.sizeDelta = self.targetSize
        elseif k == &quot;alpha&quot; then
            self.canvasGroup.alpha = v
        elseif self.target[k] then
            self.target[k] = v
        end
    end

    function private:GetTargetAttr(k)
        self:CheckTargetAttr(k)
        if self.isTargetSelf then
            return self.target[k] 
        end
            if k == &quot;x&quot; or k == &quot;y&quot; or k == &quot;z&quot; then
            return self.targetPosition[k]
        elseif k == &quot;scaleX&quot; or k == &quot;scaleY&quot; or k == &quot;scaleZ&quot; then
            return self.targetScale[TweenUtil.GetTweenAttrName(k)]
        elseif k == &quot;rotationX&quot; or k == &quot;rotationY&quot; or k == &quot;rotationZ&quot; then
            return self.targetRotation[TweenUtil.GetTweenAttrName(k)]
            elseif k == &quot;width&quot; or k == &quot;height&quot; then
            return self.targetSize[TweenUtil.GetTweenAttrName(k)]
        elseif k == &quot;alpha&quot; then
            return self.canvasGroup.alpha
        else
            return self.target[k]
        end
    end

    function private:StopAction()
        if not self.isStart or self.tweenId == 0 then return end
        TweenUtil.RemoveTween(self.tweenId)
    end
    
    function public:Reset()
        private.canUpdate = false
        
        private.stepIdx = 1
        private.loop = false
        private.loopTotalCount = -1
        private.loopCount = 0
        private.onChange = nil
        private.loopComplete = nil
        private:ClearTarget()
        private.steps = nil
        private.curStepStr = nil
        private.lastStep = nil
        private.initialProps = nil
        private.isStart = false
        private.tweenId = 0
        private.timeCount = 0
    end
    
    function private:ClearTarget()
        self.target = nil
        self.targetPosition = nil
        self.targetTransform = nil
        self.canvasGroup = nil
        self.targetScale = nil
        self.targetRotation = nil
        self.targetSize = nil
        self.isTargetSelf = false
        self.targetName = &quot;&quot;
    end
    
    function private:ClearTargetByKey(k)
        if k == &quot;x&quot; or k == &quot;y&quot; or k == &quot;z&quot; then
            self.targetPosition = nil
        elseif k == &quot;scaleX&quot; or k == &quot;scaleY&quot; or k == &quot;scaleZ&quot; then
            self.targetScale = nil
        elseif k == &quot;rotationX&quot; or k == &quot;rotationY&quot; or k == &quot;rotationZ&quot; then
            self.targetRotation = nil
        elseif k == &quot;width&quot; or k == &quot;height&quot; then
            self.targetSize = nil
        end
    end
    
    private:Init()
    return public
</code></pre>
<p>}</p>
<p>local TweenUtilMaker &#x3D; function()<br>    local private &#x3D; {}<br>    local public &#x3D; {}<br>        local pairs &#x3D; pairs<br>    private.TweenPool &#x3D; {}<br>    private.TweenList &#x3D; {}<br>    private.TweenTargets &#x3D; {}<br>    private.tweenId &#x3D; 0<br>    private.tweenCount &#x3D; 0<br>    private.tweenAttrMap &#x3D; {<br>        scaleX &#x3D; “x”,<br>        scaleY &#x3D; “y”,<br>        scaleZ &#x3D; “z”,<br>        rotationX &#x3D; “x”,<br>        rotationY &#x3D; “y”,<br>        rotationZ &#x3D; “z”,<br>        width &#x3D; “x”,<br>        height &#x3D; “y”,<br>    }</p>
<pre><code>private.GetTween = function()
    local tw
    local time = Time.time
    for i = 1,#private.TweenPool do
        if time - private.TweenPool[i].resetTime &gt; 0.034 then
            tw = table.remove(private.TweenPool,i)
            break
        end
    end
    if not tw then
        tw = GTween()
    end
    return tw
end

public.addTween = function(target,props)
    if UGUITools.IsNil(target) then
        return
    end

    local tw = private.GetTween()
    local tweenId = private.tweenId + 1
    tw:SetTarget(target,tweenId)
    tw:SetProps(props)
    private.tweenId = tweenId
    private.TweenList[tweenId] = tw
    private.TweenTargets[tweenId] = target

    private.tweenCount = private.tweenCount + 1
    return tw,tweenId
end

public.RemoveTweenTarget = function(target)
    if UGUITools.IsNil(target) then
        return
    end

    for k,v in pairs(private.TweemTargets) do
        if v == target then
            TweenUtil.RemoveTween(k)
        end
    end
end

    public.RemoveTween = function(tweenId)
    if not tweenId or tweenId == 0 then
        return 
    end
    local tw = private.TweenList[tweenId]
    if not tw then
        return
    end
    tw:Reset()
    private.TweenList[tweenId] = nil
    private.TweenTargets[tweenId] = nil
    private.tweenCount = private.tweenCount - 1
    tw.resetTime = Time.time
    table.insert(private.TweenPool,tw)
end

public.Update = function(deltaTime)
    if private.tweenCount &gt; 0 then
        for k,v in pairs(private.TweenList) do
            v:RunAction(deltaTime)
        end
    end
end

public.GetTweenAttrName = function(attrName)
    return private.tweenAttrMap[attrName]
end

    public.ClearAll = function()
    if private.tweenCount &gt; 0 then
        for tweenId, v in pairs(private.TweenList) do
            public.RemoveTween(tweenId)
            v = nil
        end
    end
    private.TweenList = &#123;&#125;
    private.tweenId = 0
    private.tweenCount = 0
end

return public
</code></pre>
<p>end</p>
<p>TweenUtil &#x3D; TweenUtil or TweenUtilMaker()</p>
<p>More info: <a class="link"   target="_blank" rel="noopener" href="https://hexo.io/docs/one-command-deployment.html" >Deployment <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a></p>

            
        </div>
        <div class="page-template-comments">
            
        </div>
    </div>
</div>


                

            </div>



        </div>

        <div class="page-main-content-bottom">
            <footer class="footer">
    <div class="info-container">
        <div class="copyright-info">
            &copy;
            
              <span>2023</span>
              -
            
            2023&nbsp;&nbsp;<i class="fa-solid fa-heart fa-beat" style="--fa-animation-duration: 0.5s; color: #f54545"></i>&nbsp;&nbsp;<a href="/">茶小李</a>
        </div>
        
            <script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
            <div class="website-count info-item">
                
                    <span id="busuanzi_container_site_uv" class="busuanzi_container_site_uv">
                        访问人数&nbsp;<span id="busuanzi_value_site_uv" class="busuanzi_value_site_uv"></span>
                    </span>
                
                
                    <span id="busuanzi_container_site_pv" class="busuanzi_container_site_pv">
                        总访问量&nbsp;<span id="busuanzi_value_site_pv" class="busuanzi_value_site_pv"></span>
                    </span>
                
            </div>
        
        <div class="theme-info info-item">
            <span class="powered-by-container">由 <?xml version="1.0" encoding="utf-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg version="1.1" id="圖層_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1rem" height="1rem" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve"><path fill="#0E83CD" d="M256.4,25.8l-200,115.5L56,371.5l199.6,114.7l200-115.5l0.4-230.2L256.4,25.8z M349,354.6l-18.4,10.7l-18.6-11V275H200v79.6l-18.4,10.7l-18.6-11v-197l18.5-10.6l18.5,10.8V237h112v-79.6l18.5-10.6l18.5,10.8V354.6z"/></svg><a target="_blank" href="https://hexo.io">Hexo</a> 驱动</span>
                <br> 
            <span class="theme-version-container">主题&nbsp;<a class="theme-version" target="_blank" href="https://github.com/EvanNotFound/hexo-theme-redefine">Redefine v1.2.1</a>
        </div>
        
        
        
            <div id="start_time_div" style="display:none">
                2023/3/16 23:00:00
            </div>
            <div>
                博客已运行 <span class="odometer" id="runtime_days" ></span> 天 <span class="odometer" id="runtime_hours"></span> 小时 <span class="odometer" id="runtime_minutes"></span> 分钟 <span class="odometer" id="runtime_seconds"></span> 秒
            </div>
        
        
        
            <script async data-pjax>
                try {
                    function odometer_init() {
                    const elements = document.querySelectorAll('.odometer');
                    elements.forEach(el => {
                        new Odometer({
                            el,
                            format: '( ddd).dd',
                            duration: 200
                        });
                    });
                    }
                    odometer_init();
                } catch (error) {}
            </script>
        
        
        
    </div>  
</footer>
        </div>
    </div>

    

    <div class="right-bottom-side-tools">
        <div class="side-tools-container">
    <ul class="unfolded-tools-list">
        <li class="right-bottom-tools tool-font-adjust-plus flex-center">
            <i class="fa-regular fa-magnifying-glass-plus"></i>
        </li>

        <li class="right-bottom-tools tool-font-adjust-minus flex-center">
            <i class="fa-regular fa-magnifying-glass-minus"></i>
        </li>

        <li class="right-bottom-tools tool-expand-width flex-center">
            <i class="fa-regular fa-expand"></i>
        </li>

        <li class="right-bottom-tools tool-dark-light-toggle flex-center">
            <i class="fa-regular fa-moon"></i>
        </li>

        <!-- rss -->
        

        
            <li class="right-bottom-tools tool-scroll-to-top flex-center">
                <i class="fa-regular fa-arrow-up"></i>
            </li>
        

        <li class="right-bottom-tools tool-scroll-to-bottom flex-center">
            <i class="fa-regular fa-arrow-down"></i>
        </li>
    </ul>

    <ul class="folded-tools-list">
        <li class="right-bottom-tools tool-toggle-show flex-center">
            <i class="fa-regular fa-cog fa-spin"></i>
        </li>
        
    </ul>
</div>

    </div>

    <div class="image-viewer-container">
    <img src="">
</div>


    


</main>




<script src="/js/utils.js"></script>

<script src="/js/main.js"></script>

<script src="/js/layouts/menu-shrink.js"></script>

<script src="/js/tools/go-top-bottom.js"></script>

<script src="/js/tools/dark-light-toggle.js"></script>





    
<script src="/js/tools/code-block.js"></script>




    
<script src="/js/layouts/lazyload.js"></script>




    
<script src="/js/tools/runtime.js"></script>

    
<script src="/js/layouts/odometer.min.js"></script>

    
<link rel="stylesheet" href="/assets/odometer-theme-minimal.css">









<div class="post-scripts pjax">
    
</div>


    
<script src="/js/libs/pjax.min.js"></script>

<script>
    window.addEventListener('DOMContentLoaded', () => {
        window.pjax = new Pjax({
            selectors: [
                'head title',
                '.page-container',
                '.pjax'
            ],
            history: true,
            debug: false,
            cacheBust: false,
            timeout: 0,
            analytics: false,
            currentUrlFullReload: false,
            scrollRestoration: false,
            // scrollTo: true,
        });

        document.addEventListener('pjax:send', () => {
            REDEFINE.utils.pjaxProgressBarStart();
        });

        document.addEventListener('pjax:complete', () => {
            REDEFINE.utils.pjaxProgressBarEnd();
            window.pjax.executeScripts(document.querySelectorAll('script[data-pjax], .pjax script'));
            REDEFINE.refresh();
        });
    });
</script>




    <div id="aplayer"></div>

<script src="/js/libs/APlayer.min.js"></script>


<script src="/js/plugins/aplayer.js"></script>


</body>
</html>
